home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / bbs / getid213.lha / Doors / GetID / GetID.rexx < prev    next >
OS/2 REXX Batch file  |  1994-11-13  |  8KB  |  287 lines

  1. /***************************************************************************
  2. **                                                                                                                                              **
  3. ** $VER: GetID.rexx 2.13 (13.11.94)                                                                              **
  4. ** Public domain by Lauri Aalto <kilroy@fipnet.fi>                                              **
  5. ** See documentation for details                                                                                  **
  6. **                                                                                                                                              **
  7. ** tab size = 2                                                                                                                      **
  8. **                                                                                                                                              **
  9. ***************************************************************************/
  10.  
  11. ver = '2.13'
  12.  
  13. options results
  14. options failat 21
  15.  
  16. parse arg ln ' ' file
  17. diz = 'file_id.diz'
  18. xdiz = '~(' || diz || ')'
  19.  
  20. /** CONFIG ****************************************************************/
  21.  
  22. /*    Temporary directory for descriptions and virus checking.
  23.     Set this to a fast device, eg. RAM: if you have lots of it.
  24.     All other files in this directory will get deleted! */
  25. TempDir = "SYS:T/GetID_" || ln
  26.  
  27. /*    Should we check for viruses? Set to 0 to disable, anything else to
  28.     enable checking. Virus Checker version >= 6.44 needs to be already
  29.     running! */
  30. VirusCheck = 0
  31.  
  32. /*    Set to 1 to make unsupported archive formats to fail. */
  33. FailUnsupported = 1
  34.  
  35. /*    A list of files to delete from LhA/Zip packets, "" for no deleting.
  36.     Edit the list to suit your needs... */
  37. LhaDeleteList = "BBS:Doors/GetID/Unwanted.files"
  38. ZipDeleteList = ""
  39.  
  40. /*    Character converter launch command, "" no for no conversion. */
  41. LhaConv = ""
  42. ZipConv = "port p" addpart(TempDir, diz)
  43. ArjConv = "port p" addpart(TempDir, diz)
  44. DmsConv = ""
  45.  
  46. /** END OF CONFIG *********************************************************/
  47.  
  48. CR = D2C(13)
  49. LF = D2C(10)
  50. CRLF = CR || LF
  51. ESC = D2C(27)
  52. WHITE = ESC || "[0m"
  53. RED = ESC || "[31m"
  54. GREEN = ESC || "[32m"
  55. YELLOW = ESC || "[33m"
  56. BLUE = ESC || "[34m"
  57. PURPLE = ESC || "[35m"
  58. CYAN = ESC || "[36m"
  59. CLEAR = D2C(12)
  60.  
  61. LineName = Con_LineActive(ln)
  62. if LineName = "" then exit 10
  63. address value LineName
  64.  
  65. SendModem CRLF || CRLF || "GetID v" || ver "by Lauri Aalto" || CRLF
  66. SetStatus "Checking uploaded files"
  67.  
  68. address command 'makedir' TempDir
  69. if ~exists(TempDir) then do
  70.     LogEntry "Couldn't create temporary directory"
  71.     SendModem RED || "*** Couldn't create temporary directory" || WHITE || CRLF || CRLF
  72.     exit FailUnsupported
  73. end
  74.  
  75. /* Absolute path used to prevent some lousy shells junking this */
  76. address command 'c:list >' || addpart(TempDir, 'name' || ln) file 'lformat "%f%n*n%n"'
  77. if ~open('tempfile', addpart(TempDir, 'name' || ln), 'r') then exit 20
  78. filename = readln('tempfile')
  79. qfilename = '"' || filename || '"'
  80. file = readln('tempfile')
  81. call close 'tempfile'
  82.  
  83. address command 'setdate' qfilename 'today 00:00:00'
  84.  
  85. olddir = pragma('d', TempDir)
  86. address command 'delete #? all'
  87.  
  88. LogEntry 'Checking' file
  89.  
  90. if ~open('arc', filename, 'r') then do
  91.     LogEntry "Couldn't open" file
  92.     exit 10
  93. end
  94. buff = readch('arc', 48)
  95. call close 'arc'
  96.  
  97. SendModem GREEN || 'Testing...' WHITE || CRLF
  98.  
  99. select
  100.  
  101.     /* .(lha|lzh|run) ? */
  102.     when substr(buff, 3, 3) == '-lh' | substr(buff, 45, 4) == 'SFX!' then do
  103.         address command '_lha >TECHIO:' || ln 't' qfilename
  104.         if RC ~= 0 then exit 10
  105.         if LhaDeleteList ~= "" then do
  106.             SendModem GREEN || "Removing unwanted files..." || WHITE
  107.             address command 'lha -i' || LhaDeleteList 'd' qfilename
  108.             SendModem CRLF
  109.         end
  110.         if VirusCheck then do
  111.             SendModem GREEN || "Checking for viruses..." || WHITE
  112.             address command 'lha -mM e' qfilename
  113.             call check
  114.             address command 'delete' xdiz 'all'
  115.             SendModem CRLF
  116.         end
  117.         else address command 'lha x' qfilename diz
  118.         if LhaConv ~= "" & exists(diz) then address command LhaConv
  119.     end
  120.  
  121.     /* .zip ? */
  122.     when left(buff, 2) == 'PK' then do
  123.         address command 'zip >TECHIO:' || ln '-vT' qfilename
  124.         if RC ~= 0 then exit 10
  125.         if ZipDeleteList ~= "" then do
  126.             SendModem GREEN || "Removing unwanted files..." || WHITE
  127.             if open(file, ZipDeleteList, 'r') then do
  128.                 list = ""
  129.                 do while ~eof(file)
  130.                     list = list compress(readln(file))
  131.                 end
  132.                 call close file
  133.             end
  134.             address command 'zip -d' qfilename || list
  135.             drop list
  136.             SendModem CRLF
  137.         end
  138.         if VirusCheck then do
  139.             SendModem GREEN || "Checking for viruses..." || WHITE
  140.             address command 'unzip' qfilename
  141.             call check
  142.             address command 'delete' xdiz 'all'
  143.             SendModem CRLF
  144.         end
  145.         else address command 'unzip' qfilename diz
  146.         if ZipConv ~= "" & exists(diz) then address command ZipConv
  147.     end
  148.  
  149.     /* .arj ? */
  150.     when left(buff, 2) == '60'x || 'ea'x then do
  151.         address command 'unarj >TECHIO:' || ln 't' qfilename
  152.         if RC ~= 0 then exit 10
  153.         SendModem GREEN || "Arj files take a bit longer to extract so be patient" || WHITE || CRLF
  154.         address command 'unarj x' qfilename
  155.         if VirusCheck then do
  156.             SendModem GREEN || "Checking for viruses..." || WHITE
  157.             call check
  158.             SendModem CRLF
  159.         end
  160.         address command 'delete' xdiz 'all'
  161.         if ArjConv ~= "" & exists(diz) then address command ArjConv
  162.     end
  163.  
  164.     /* .dms ? */
  165.     when left(buff, 4) == 'DMS!' then do
  166.         address command 'mapus >TECHIO:' || ln '-crkR' qfilename
  167.         if RC ~= 0 then exit 10
  168.         address command 'dms viewdiz' qfilename 'save' diz
  169.         if DmsConv ~= "" & exists(diz) then address command DmsConv
  170.     end
  171.  
  172.     /* .(gz|z|Z) ? */
  173.     when (left(buff, 2) == '1f'x || '8b'x) | (left(buff, 2) == '1f'x || '9d'x) then do
  174.         address command 'gzip -tv' qfilename
  175.         if RC ~= 0 then exit 10
  176.     end
  177.  
  178.     /* .gif ? */
  179.     when left(buff, 4) == 'GIF8' then SendModem RED || 'GIF image, can''t check' || WHITE || CRLF
  180.  
  181.   /* .jpg ? */
  182.     when substr(buff, 7, 4) == 'JFIF' then SendModem RED || 'JPEG image, can''t check' || WHITE || CRLF
  183.  
  184.     /* .mpg ? */
  185.     when left(buff, 4) == '00'x || '00'x || '01'x || 'b3'x then SendModem RED || 'MPEG animation, can''t check' || WHITE || CRLF
  186.  
  187.     otherwise do
  188.         LogEntry 'Unsupported archive format:' file
  189.         SendModem CRLF || RED || file 'is not of one of the supported archive formats!' || CRLF || 'Supported formats: *.(lha|lzh|run|zip|gz|z|Z|arj|dms|gif|jpg|mpg)' || WHITE || CRLF || CRLF
  190.         exit FailUnsupported
  191.     end
  192. end
  193.  
  194. if open('dizfile', diz, 'r') then do
  195.     SendModem CLEAR || GREEN || 'Found a' diz 'from' file || ':' || WHITE || CRLF || CRLF
  196.     address command 'type' diz 'to TECHIO:' || ln
  197.     if GetYesNo(ln, CRLF || 'Do you want to keep this? ', 1) then do
  198.         if open('descfile', filename || '.desc', 'w') then do
  199.             do until eof('dizfile')
  200.                 line = formatline(readln('dizfile'))
  201.                 if line ~= "" then do
  202.                     call writeln 'descfile', line
  203.                     LogEntry '>' line
  204.                 end
  205.             end
  206.             call close 'descfile'
  207.         end
  208.     end
  209.     else LogEntry 'Discarding diz'
  210.     call close 'dizfile'
  211. end
  212.  
  213. call pragma 'd', olddir
  214. address command 'delete' TempDir 'all'
  215.  
  216. SendModem WHITE || CRLF
  217. exit 0
  218.  
  219. /* add path/filename to path */
  220. addpart:
  221.     front = arg(1)
  222.     rear  = arg(2)
  223.  
  224.     char = right(front, 1)
  225.  
  226.     if char ~= "/" & char ~= ":" then return front || "/" || rear
  227. return front || rear
  228.  
  229. /* check for viruses */
  230. check:
  231.     address 'Virus_Checker' 'checkdrive\' || TempDir
  232.     if VCHECK.0.0 > 0 then do
  233.         LogEntry '*** VIRUS INFECTION DETECTED ***'
  234.         SendModem CRLF || RED || '*** VIRUS ALERT ***' || CRLF 'The following files have been infected:' || CRLF
  235.         do i = 1 to VCHECK.0.0
  236.             LogEntry VCHECK.i.1 '(' || VCHECK.i.2 || ')'
  237.             SendModem CYAN || VCHECK.i.1 PURPLE || '(' || VCHECK.i.2 || ')' || CRLF
  238.         end
  239.         LogEntry '*** VIRUS INFECTION DETECTED ***'
  240.         SendModem WHITE || CRLF
  241.         call pragma 'd', olddir
  242.         address command 'delete' TempDir 'all'
  243.         exit 20
  244.     end
  245. return
  246.  
  247. /* reflow a line, wrap words etc. */
  248. formatline:
  249.     l = trim(translate(arg(1), '  ', '0d'x || '09'x))
  250.     ret = ''
  251.  
  252.     len = length(l)
  253.     if len > 45 then do
  254.         c = 0
  255.         do i = 1 to words(l)
  256.             w = word(l, i)
  257.             wl = length(w)
  258.             select
  259.                 when wl > 45 then do
  260.                     do while w ~= ''
  261.                         if wl > 45 then do 
  262.                             ret = ret || left(w, 45) || lf
  263.                             wl = wl - 45
  264.                         end
  265.                         else do
  266.                             ret = ret || w
  267.                             wl = 0
  268.                         end
  269.                         w = right(w, wl)
  270.                     end
  271.                     c = 0
  272.                 end
  273.                 when c + wl > 45 then do
  274.                     ret = ret || lf || w
  275.                     c = wl
  276.                 end
  277.                 otherwise do
  278.                     ret = ret w
  279.                     c = c + wl + 1
  280.                 end
  281.             end
  282.         end
  283.         if left(ret, 1) = ' ' then ret = right(ret, length(ret) - 1)
  284.     end
  285.     else ret = l
  286. return ret
  287.